/*
 * 文件名称:          JTAPoolingDataSource.java
 * 版权所有@ 2016——2017 无锡聆音科技有限公司，保留所有权利
 * 时间:             2016年7月27日 下午9:21:11
 */
package com.lingyin.database.transaction.datasource.btm;

import java.sql.Connection;
import java.sql.SQLException;

import org.springframework.transaction.support.TransactionSynchronizationManager;

import bitronix.tm.resource.jdbc.PoolingDataSource;

/**
 *  在JTA事务的时候，spring对于只读的事务不设置为只读，
 *  这里根据BTM的poolingdatasource的情况，在JTA的只读
 *  事务的时候，设置connection为只读的。
 * 
 * @项目        hibernate.database.transaction
 * 
 * @作者:       关宏新
 * 
 * @日期:       2016年7月27日
 * 
 * @负责人:    关宏新
 * 
 * @负责小组:   聆音项目组
 * 
 */
public class JTAPoolingDataSource extends PoolingDataSource
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /**
     * 
     */
    public JTAPoolingDataSource()
    {
    }
    
    /**
     * 
     *(non-Javadoc)
     * @see bitronix.tm.resource.jdbc.PoolingDataSource#getConnection()
     *
     */
    public Connection getConnection() throws SQLException
    {
        Connection con = super.getConnection();
        // 根据事务设置情况，设置连接的只读属性。
        con.setReadOnly(TransactionSynchronizationManager.isCurrentTransactionReadOnly());            
        return con;
    }
    
    /**
     * 
     *(non-Javadoc)
     * @see bitronix.tm.resource.common.ResourceBean#getAutomaticEnlistingEnabled()
     *
     */
    public boolean getAutomaticEnlistingEnabled()
    {
        // 对于只读的事务，不加入到队列中
        if (TransactionSynchronizationManager.isCurrentTransactionReadOnly())
        {
            return false;
        }
        return super.getAutomaticEnlistingEnabled();
    }

}
